package nan.object_oriented;
/*
理解多态
 */
//类的实现者
class Shape{
    public void draw(){
        //System.out.println("hua ");//会被子类覆盖掉
    }
}
class Cycle extends Shape{
    @Override
    public void draw() {
        System.out.println("画一个圆圈");
    }
}
class Rec extends Shape{
    @Override
    public void draw() {
        System.out.println("画一个矩形");
    }
}
//类的调用者
public class MainDraw {
    //当类的调用者在编写 drawMap 这个方法的时候, 参数类型为 Shape (父类),
    // 此时在该方法内部并不知道, 也不关注当
    //前的 shape 引用指向的是哪个类型(哪个子类)的实例.
    // 此时 shape 这个引用调用 draw 方法可能会有多种不同的表现
    //(和 shape 对应的实例相关), 这种行为就称为 多态
    public static void drawMap(Shape shape) {
        shape.draw();
    }
    //打印单个图形
    public static void main(String[] args) {
        Shape shape1 = new Cycle();//向上转型，
        // shape1是一个父类的引用，指向一个子类Cycle的实例
        Shape shape2 = new Rec();
        drawMap(shape1);
        drawMap(shape2);
        shape1.draw();
    }
}
